package com.aiju.common.http;

import android.content.Context;

import com.aiju.app.DataProviderManager;
import com.aiju.app.callback.HttpCallback;

import java.util.Map;

/**
 * @author: 佐为
 * @date: 2017-03-06 10:53
 * @version: V1.0
 * @Description: 网络请求代理类
 *
 * <p>
 * 所有的网络操作都通过该代理类去实现；如果要改变网络请求框架，只需要在该类里替换相应的网络请求框架即可，
 * 客户端所有引用的网络操作都不需要修改。</p>
 */
public class AiJuHttpProxy implements AiJuHttp {

    /**
     * 代理对象
     */
    private AiJuHttp mAiJuHttp;

    /**
     * 定义一个静态私有变量(不初始化，不使用final关键字，
     * 使用volatile保证了多线程访问时instance变量的可见性，
     * 避免了instance初始化时其他变量属性还没赋值完时，被另外线程调用。
     */
    private static volatile AiJuHttpProxy instance;

    public static AiJuHttpProxy getInstance() {
        if (instance == null) {
            synchronized (AiJuHttpProxy.class) {
                if (instance == null) {
                    instance = new AiJuHttpProxy();
                }
            }
        }
        return instance;
    }

    private AiJuHttpProxy() {
        // this.mAiJuHttp = new VolleyHttp();
        this.mAiJuHttp = new OkHttp();
        init(DataProviderManager.getContext());
    }

    @Override
    public void init(Context context) {
        mAiJuHttp.init(context);
    }

    @Override
    public void requestGet(String url, HttpCallback callback) {
        mAiJuHttp.requestGet(url, callback);
    }

    @Override
    public void requestPost(String url, Map<String, String> parameters, HttpCallback callback) {
        mAiJuHttp.requestPost(url, parameters, callback);
    }

    @Override
    public void cancel(String tag) {
        mAiJuHttp.cancel(tag);
    }

}
